package com.wn.sms;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.redis.core.RedisTemplate;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

/**
 * @author yellow Docter
 * @date 2023 -02-24
 * @desc
 *
 * 1、集成 短信 工具类型  SmsUtils
 *
 * 2、自己搞一个SmsTemplate  (springboot 自动装配有关系)
 *
 *
 */
@EnableKnife4j
@EnableSwagger2WebMvc
@SpringBootApplication
@ComponentScan({
        "com.wn.sms",
        "com.wn.common"
})
public class SmsApplication {

    /**
     * 01 怎么加载 RedisTemplate ?
     *  1、依赖中有一个 spring-boot-autoconfigure-2.3.12.RELEASE.jar 依赖
     *  2、spring.factories ---->  加载 org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration 类
     *
     *  3、 @EnableConfigurationProperties(RedisProperties.class)  (加载配置 )
     *                      @ConfigurationProperties(prefix = "spring.redis")   yml中配置的类
     *                      public class RedisProperties {}
     *      public class RedisAutoConfiguration {
     *
     *      @Bean
     * 	    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
     * 			throws UnknownHostException {
     * 		RedisTemplate<Object, Object> template = new RedisTemplate<>();
     * 		template.setConnectionFactory(redisConnectionFactory);       (创建了模板)
     * 		return template;
     *    }
     *
     *  4、启动的时候   RedisTemplate 就加入到ioc容器中
     *
     *  思考:
     *  1、spring.factories在哪里加载?
     *      1、@SpringBootApplication这个注解中 有 @EnableAutoConfiguration
     *      2、@Import(AutoConfigurationImportSelector.class) 加入了 AutoConfigurationImportSelector 是扫描factories 文件
     *      3、AutoConfigurationImportSelector类 177 加载 SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),、
     *      4、SpringFactoriesLoader 类中 120行 125 行方法中加载了  classLoader.getResources("META-INF/spring.factories");
     *
     *  2、我可以自己写xxxTemplate ?
     *     1、  搞一个 spring.factories 文件
     *     2、  加载  RedisAutoConfiguration 类型 (这里有一个 SmsAutoConfiguration类)
     *     3、  创建一个  SmsTemplate
     *     4、  实现了自动注入
     *
     */
    public static void main(String[] args) {
        SpringApplication.run(SmsApplication.class,args);
    }

}
